package portal.entities;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;

import portal.converter.convVo;
import portal.vo.CompraVO;

@Entity
@Table(name="Compras")
public class Compra extends AbstractEntity<CompraVO>{
	

	private List<Item> items = new ArrayList<Item>();	
	private String estadoCompra;	
	private Usuario usuarioCompra;
	private Date fechaCompra;
	
	
	@Transient
	protected CompraVO getVOInstance() {
		return new CompraVO();
	}
	

	@Transient
	public CompraVO getVO() {
		
		CompraVO vo = new CompraVO();
		vo.setId(this.getId());
		vo.setEstadoCompra(this.getEstadoCompra());	
		vo.setFechaCompra(this.getFechaCompra());
		vo.setUsuarioCompra(this.getUsuarioCompra().getVO());
		vo.setItems( convVo.getListaVoFromEntity(this.getItems()));
		
		return vo;

	}

	@Transient
	public void setVO(CompraVO vo) {
		if (id == null) {
			this.setId(vo.getId());
		}
		
		this.setEstadoCompra(vo.getEstadoCompra());
		this.setFechaCompra(vo.getFechaCompra());
		if(vo.getUsuarioCompra() != null){ 
			Usuario u = new Usuario();
			u.setId(vo.getUsuarioCompra().getId());
			this.setUsuarioCompra(u);
		}
		
		this.items = convVo.getListaEntityFromVo(vo.getItems());
		
	
	}
	


	@ManyToOne//(cascade=CascadeType.ALL)
	public Usuario getUsuarioCompra() {
		return usuarioCompra;
	}
	
	public void setUsuarioCompra(Usuario usuarioCompra) {
		this.usuarioCompra = usuarioCompra;
	}


	
	public String getEstadoCompra() {
		return estadoCompra;
	}


	public void setEstadoCompra(String estadoCompra) {
		this.estadoCompra = estadoCompra;
	}


	@OneToMany(mappedBy="compra", cascade=CascadeType.ALL)	
	public List<Item> getItems() {
		return items;
	}


	public void setItems(List<Item> items) {
		this.items = items;
	}


	public Date getFechaCompra() {
		return fechaCompra;
	}


	public void setFechaCompra(Date fechaCompra) {
		this.fechaCompra = fechaCompra;
	}
	
	public CompraVO loadVOForService() {
		CompraVO vo = new CompraVO();
		vo.setId(id);
		vo.setFechaCompra(fechaCompra);
		vo.setEstadoCompra(estadoCompra);
		return vo;
	}

	public void addItem(Item itemCompra) {
		items.add(itemCompra);
		itemCompra.setCompra(this);
	}
	
}
